package com.itheima.d1_charset;

import java.nio.charset.StandardCharsets;
import java.util.Arrays;

/**
 * 目标：掌握如何使用Java代码完成对字符的编码和解码。
 */
public class Test {
    public static void main(String[] args) throws Exception {
        // 1、编码 getBytes
        String str1 = "我a你";
        byte[] bytes1 = str1.getBytes();
        System.out.println(Arrays.toString(bytes1)); //[-26, -120, -111, 97, -28, -67, -96]
//        for (byte b : bytes1) {
//            System.out.print(Integer.toBinaryString(b)); //转化为二进制
//        }
//        System.out.println();

        //指定GBK字符集进行编码
        //ASCII GBK UTF-8 iso8859-1
        byte[] bytes2 = str1.getBytes("GBK");
        System.out.println(Arrays.toString(bytes2)); //[-50, -46, 97, -60, -29]


        // 2、解码
        String str2 = new String(bytes1); //平台默认的字符集   使用默认编码解码
        System.out.println("str2 = " + str2); //str2 = 我a你

        String str3 = new String(bytes2); //bytes2是通过GBK编码出来的字节数组，解码时也应该要使用GBK解码，否则会乱码
        System.out.println("str3 = " + str3); //str3 = ��a�� ---> 汉字乱码了，a没乱码（因为兼容了ASCII编码）

        //指定GBK进行解码
        String str4 = new String(bytes2, "GBK");
//        String str5 = new String(bytes1, "GBK");
        System.out.println("str4 = " + str4); //str4 = 我a你
//        System.out.println("str5 = " + str5); //str5 = 鎴慳浣�

        //编码和解码采用的字符集要一致，否则就会出现乱码现象
    }
}

